iT邦幫忙

0

[Pyhton][資料結構]稀疏矩陣(三)

  • 分享至 

  • xImage
  •  

給定兩個稀疏矩陣,並用三元序對表示:

sparse1 = [
             [5, 6, 4], 
             [1, 2, 3], 
             [2, 1, 6],
             [3, 1, 9], 
             [4, 5, 12]
          ]

sparse2=[
        [5,6,5],
        [1,2,7],
        [2,5,2],
        [3,4,4],
        [4,2,2],
        [4,5,5]
        ]

相加、相乘

def add(sparse1,sparse2): #兩稀疏矩陣相加
    sparse3=[]
    i,j=1,1
    sparse3=[[sparse1[0][0],sparse1[0][1],0]]

    if sparse1[0][0] != sparse2[0][0] or sparse1[0][1] !=sparse2[0][1]:
        print("兩矩陣大小不同,無法相加")
        
    else:
        while i<=sparse1[0][2] and j<=sparse2[0][2]:
            if sparse1[i][0]==sparse2[j][0]:
                if sparse1[i][1]==sparse2[j][1]:
                    sparse3.append([sparse1[i][0],sparse2[j][1],sparse1[i][2]+sparse2[j][2]])
                    i+=1
                    j+=1
                    sparse3[0][2]+=1
                else:
                    if  sparse1[i][1] < sparse2[j][1]:
                        sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])
                        i+=1
                        sparse3[0][2]+=1
                    else:
                        sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])
                        j+=1
                        sparse3[0][2]+=1
            else:
                if  sparse1[i][0] < sparse1[j][0]:
                    sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])
                    i+=1
                    sparse3[0][2]+=1
                else:
                    sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])
                    j+=1
                    sparse3[0][2]+=1


        return sparse3

def multi(sparse1,sparse3) : #兩稀疏矩陣相乘
    s1row=sparse1[0][0]
    s1col=sparse1[0][1]
    s3row=sparse3[0][0]
    s3col=sparse3[0][1]
    sparse4=[] 
    c=0   #計算總共非零項
    if s1col!=s3row:
        print("大小不同,無法相乘")
    else:
        sparse4.append([s1row,s3col,0]) #將總共的行列數append入新的matrix

        for i in sparse1[1:]: #遍歷sparse1的非0元素
            total=0
            for j in sparse3[1:]: #遍歷sparse3的非0元素
                if i[1]==j[0]: #大小相同就相乘
                    k=j[1]
                    total+=i[2]*j[2]
            if total !=0:
                sparse4.append([i[0],k,total])    
                c+=1   

        sparse4[0][2]=c

        return sparse4     

看結果

addmatrix=add(sparse1,sparse2)
print("給定兩個三元序對,相加:",addmatrix)
multimatrix=multi(sparse1,sparse3)
print("給定兩個三元序對,相乘:",multimatrix)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言